/*
 * Copyright 2014 JootMir Project
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * Support: http://www.jootmir.org
 */
package org.jootmir.client.core.font;

import java.awt.Color;

/**
 * 字体支持
 * <br>
 * 程序中的字体定然是使用纹理图进行底层支持的
 * <br>
 * 因而可以使用{@link #drawString(int, int, String, Color) 绑定颜色}给字体“蒙版”来为字体提供颜色
 * 
 * @author ShawRyan
 */
public interface Font {
	
	/** 透明色 */
	Color transparent = new Color(0.0f, 0.0f, 0.0f, 0.0f);
	/** 白色 */
	Color white = new Color(1.0f, 1.0f, 1.0f, 1.0f);
	/** 黑色 */
	Color black = new Color(0, 0, 0, 1.0f);
	/** 黄色 */
	Color yellow = new Color(1.0f, 1.0f, 0, 1.0f);
	/** 红色 */
	Color red = new Color(1.0f, 0, 0, 1.0f);
	/** 蓝色 */
	Color blue = new Color(0, 0, 1.0f, 1.0f);
	/** 绿色 */
	Color green = new Color(0, 1.0f, 0, 1.0f);
	/** 灰色 */
	Color gray = new Color(0.5f, 0.5f, 0.5f, 1.0f);
	/** 青色 */
	Color cyan = new Color(0, 1.0f, 1.0f, 1.0f);
	/** 深灰色 */
	Color darkGray = new Color(0.3f, 0.3f, 0.3f, 1.0f);
	/** 浅灰色 */
	Color lightGray = new Color(0.7f, 0.7f, 0.7f, 1.0f);
	/** 深粉红色 */
	Color pink = new Color(255, 175, 175, 255);
	/** 深橙色 */
	Color orange = new Color(255, 200, 0, 255);
	/** 暗红色 */
	Color magenta = new Color(255, 0, 255, 255);
    
	/** 获取字体名称 */
	String getFontFace();
	/** 
	 * 获取字体行高
	 * <br>每个文字的宽高及其在一行中的位置都是不同的
	 * <br>字体层面已经将位置(比如标点符号应该在行下方)与行高填充(比如32px大小字体应该大小可能是28px，其行高可能是33px)方面的差异规避了
	 * <br>但是仍然提供其他例程获取字体行高的方法
	 */
	int getLineHeight();
	/**
	 * 字体中每个字体的宽度都不同
	 * <br>
	 * 其他例程可以通过这个方法获取指定字符串占用的宽度
	 * 
	 * @param str
	 * 		要计算的字符串
	 * @return 该字符串占用的宽度(单位为像素)
	 */
	int getWidth(String str);
	/** 字体是否是粗体<br>取决于初始化时的参数 */
	boolean isBold();
	/** 字体是否是斜体<br>取决于初始化时的参数 */
	boolean isItalic();
	/** 字体大小<br>单位为像素 */
	int getFontSize();
	/** 
	 * 在制定区域绘制文字
	 * <br>
	 * 展示的文字为白色
	 * 
	 * @param x
	 * 		绘制区域起始坐标(左上角)横坐标
	 * @param y
	 * 		绘制区域起始坐标(左上角)纵坐标
	 * @param text
	 * 		要绘制的文字
	 */
	void drawString(int x, int y, String text);
	/** 
	 * 使用制定颜色在制定区域绘制文字
	 * 
	 * @param x
	 * 		绘制区域起始坐标(左上角)横坐标
	 * @param y
	 * 		绘制区域起始坐标(左上角)纵坐标
	 * @param text
	 * 		要绘制的文字
	 * @param color
	 * 		希望呈现的字体的颜色
	 */
	void drawString(int x, int y, String text, Color color);
}